前言
- AtomicBoolean
- AtomicInteger
AtomicLong
AtomicIntegerArray :原子更新Integer数组
- AtomicLongArray
AtomicReferenceArray
AtomicReference :原子更新引用类型
- AtomicReferenceFieldUpdater : 源自更新引用类型里的字段
AtomicMarkableReference :源自更新带标记位的引用类型。
AtomicIntegerFieldUpdate :原子更新整形的字段更新器
- AtomicLongFieldUpdate :原子更新长整形字段的更新器
- AtomicStampedReference :使用版本号来区别变量,可以避免CAS可能出现的ABA问题
🖊
原子更新基本类
- AtomicBoolean
- AtomicInteger
- AtomicLong
使用
以AtomicInteger为例,常用方法:
1 | int addAndGet(int delta); // 增加delta值后,返回结果 |
原子更新数组
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
使用
构造方法
public AtomicIntegerArray( int length )
声明一个空的限长的数组public AtomicIntegerArray( int[] value )
拷贝一份数组,作为本数组的元素(注意,这些是复制,不是原数组!对数组元素修改不影响原数组!)
示例:
1 | int[] value = new int[] {1,2}; |
常用方法
1 | int addAndGet(int i, int delta); // 将第i个元素与delta相加 |
原子更新引用类型
- AtomicReference :原子更新引用类型
- AtomicReferenceFieldUpdater : 源自更新引用类型里的字段
- AtomicMarkableReference :源自更新带标记位的引用类型。
原子更新字段类
- AtomicIntegerFieldUpdate :原子更新整形的字段更新器
- AtomicLongFieldUpdate :原子更新长整形字段的更新器
- AtomicStampedReference :使用版本号来区别变量,可以避免CAS可能出现的ABA问题
使用
构造
这些类都是抽象类,要用其自带的工厂方法生成一个实例更新器
1 | AtomicIntegerFieldUpdater.newUpdater(User.class, "old"); // 设置想要更新的类和属性,这个old变量必须用volatile修饰 |